/**
 *    @file       csha.cpp
 *
 *    @brief      
 *    @details
 *
 *    @version    1.0
 *    @date       01/22/2014 16:23:20 PM
 *
 *    @author     Theophilus (), wangtf418@gmail.com
 */
#include "csha.h"

//class csha//////////////////////////////////////////////////
csha::csha() : m_initflag(0)
{

}

csha::~csha()
{

}

bf_int_t csha::update(const bf_uchar_t *data, bf_size_t len)
{
	if (!data || len == 0)
	{
		return BF_ERROR;
	}

	if (m_initflag == 0)
	{
		SHA_Init(&m_sha_ctx);
		m_initflag = 1;
	}
	SHA_Update(&m_sha_ctx, data, len);
	return BF_OK;
}

bf_int_t csha::finish(bf_uchar_t hash[20])
{
	if (!hash || m_initflag == 0)
	{
		return BF_ERROR;
	}
	SHA_Final(hash, &m_sha_ctx);
	return BF_OK;
}

//class csha1/////////////////////////////////////////////////
csha1::csha1() : m_initflag(0)
{

}

csha1::~csha1()
{

}

bf_int_t csha1::update(const bf_uchar_t *data, bf_size_t len)
{
	if (!data || len == 0)
	{
		return BF_ERROR;
	}

	if (m_initflag == 0)
	{
		SHA1_Init(&m_sha_ctx);
		m_initflag = 1;
	}
	SHA1_Update(&m_sha_ctx, data, len);
	return BF_OK;
}

bf_int_t csha1::finish(bf_uchar_t hash[20])
{
	if (!hash || m_initflag == 0)
	{
		return BF_ERROR;
	}
	SHA1_Final(hash, &m_sha_ctx);
	return BF_OK;
}


